import os
from datetime import datetime
from flask import Flask, render_template, render_template_string,g

app = Flask(__name__, template_folder='templates')

@app.route('/hello')
def test():
    html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
  <h3 style="color: lightgreen;font-size: medium;">欢迎回来~</h3>
  {{config}}
  <h3>{{g.user}} == {{user}} </h3>
</body>
</html>
    """
    return render_template_string(html)


@app.before_request
def before_request():
    g.user = 'zhangsan'

@app.route('/mine')
def mine():
    return render_template('mine.html')


@app.context_processor
def inject():
    ''' 上下文处理器，无需指定g '''
    return dict(user=g.user)

def read_html():
    """
        模板渲染原理
            读取文件
            替换
            返回替换后的文件
    """
    file_name = os.path.join(os.path.dirname(__file__),'test.py')
    now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    with open(file_name, 'r',encoding='utf-8') as f:
        html = f.read()
        # 替换特殊空位
        html.replace('{{time}}', now_time)
        return html


"""
    模板引擎介绍
        Flask使用Jinja2作为默认模板引擎
        [安装]
            PIP安装 pip install Jinja2
            源码安装 python setup.py install
            
        [全局对象]
            config - Flask的配置信息
            request - 请求对象
            session - 会话对象
            g - 请求相关的全局变量[如g:user]
        [全局函数]
            url_for - URL解析函数(如: 静态文件地址解析、链接跳转地址解析)
            get_flashed_messages() - 会话消息
        [上下文处理器]
            在模板的上下文中添加新的内容
            内容可以是变量，也可以是函数
            
    模板中变量的使用
    模板语法--标签
    模板语法--过滤器
    模板语法--全局函数
    模板中的宏
    模板的继承与包含
    消息闪退
"""